package com.distributer.delayqueue.delayqueue;

import java.util.List;

import com.distributer.delayqueue.job.JobMsg;
import com.distributer.delayqueue.job.JobStatus;

public interface JobOperationService {

	/**
	 * 通过jobId获取job
	 * @param jobId
	 * @return
	 */
	public JobMsg getJob(String jobId);
	
	/**
	 * 添加job到数据池
	 * @param jobMsg
	 */
	public void addJobToPool(JobMsg jobMsg);
	
	/**
	 * 从数据池删除任务
	 * @param jobId
	 */
	public void removeJobToPool(String jobId);
	
	/**
	 * 更新job任务
	 * @param jobId
	 * @param jobSatatus
	 */
	public void updateJobStatus(String jobId,JobStatus jobSatatus);
	
	/**
	 * 根据jobid删除job
	 * @param jobId
	 */
	public void deleteJobToPool(String jobId);
	
	/**
	 * 加一个job到指定的bucket
	 * @param bucketName
	 * @param jobId
	 * @param score
	 */
	public void addBucketJob(String bucketName,String jobId,double score);
	
	/**
	 * 从指定的bucketName删除job
	 * @param bucketName
	 * @param jobId
	 */
	public void removeBucketKey(String bucketName,String jobId);
	
	/**
	 * 添加任务到可执行队列
	 * @param readyName
	 * @param jobId
	 */
	public void addReadyTime(String readyName,String jobId);
	
	/**
	 * 获取实时队列中的第一个数据
	 * @return
	 */
	public String getReadyJob();
	
	/**
	 * 获取指定个数的实时队列中的数据，不是用的POP方式，需要手动删除
	 * @param size
	 * @return
	 */
	public List<String> getReadyJob(int size);
	
	/**
	 * 删除实时队列中的任务
	 * @param jobId
	 * @return
	 */
	public boolean removeReadyJob(String jobId);
	
	/**
	 * 获取bucket最顶端的任务
	 * @param bucketName
	 * @return
	 */
	public String getBucketTop1Job(String bucketName);
	
	/**
	 * 批量获取满足条件的顶端数据，最大数量为size
	 * @param bucketName
	 * @param size
	 * @return
	 */
	public List<String> getBucketTopJobs(String bucketName,int size);
	
	public void clearAll();
}
